import { Base } from "./Base";
/**
 * 在地图上展示的最小分类元祖
 */
export class Tuple extends Base {
    constructor() {
        this.type = "";//类型
        this.map = null;
        this._successCallBack = null;//成功回调函数,请调用_success方法
        this._errorCallBack = null;//失败回调函数,请调用_error方法
    }
    //添加到指定的map中
    _addToMap(map) {
        throw new Error("请实现该方法");
    }
    //从map中移除
    _removeByMap(destroy) {
        throw new Error("请实现该方法");
    }
    //飞到元祖上
    _flyTo(duration, pitch, heading, range, maximumHeight) {
        throw new Error("请实现该方法");
    }
    _success(data) {
        this._successCallBack && this._successCallBack(data);
    }
    _error(data) {
        this._errorCallBack && this._errorCallBack(data);
    }

    /**
     * 飞到该元祖
     * @param {number} duration 时间
     * @param {number} pitch 俯仰角
     * @param {number} heading 水平角
     * @param {number} range 距离该元祖的位置距离
     * @param {number} maximumHeight 飞行的最大高度
     * @returns {this}
     */
    flyTo(duration, pitch, heading, range, maximumHeight) {
        if (this.map) {
            this._flyTo(duration, pitch, heading, range, maximumHeight);
        }
        return this;
    }

    /**
     * 添加到指定的map中
     * @param map 
     */
    addToMap(map) {
        this.map = map;
        this._addToMap(map);
        return this;
    }

    /**
     * 从map中移除
     * @param destroy
     */
    removeByMap(destroy) {
        if (this.map) {
            this._removeByMap(destroy);
            this.map = null;
        }
        return this;
    };
    /**
     * 成功的加载完成回调
     * @param callBack 
     */
    when(callBack) {
        this._successCallBack = callBack;
        return this;
    }

    /**
    * 加载失败回调
    * @param callBack 
    */
    catch(callBack) {
        this._errorCallBack = callBack;
        return this;
    }

}